/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import negocio.Mensaje;
import negocio.Paginacion;
import negocio.Usuario;
/**
 *
 * @author JAVA
 */
public class PersistenciaMensaje {
    public static int guardarmensaje(Mensaje m) {
        int i = 0;
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String fecha = sdf.format(m.getFecha());
        try {
            Conexion conexion=new Conexion();
            i = conexion.open().executeUpdate("insert into mensaje (id,idemisor,idreceptor,contenido,fecha) values (0,"+m.getEmisor().getId()+","+m.getReceptor().getId()+",'"+m.getTexto()+"','"+fecha+"')");
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaTabla.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return i;
        }


    }
    
    public static ArrayList<Mensaje> obtenerMensajesEnviados(Usuario u) {
        ArrayList<Mensaje> mensajes = new ArrayList<Mensaje>();
        try {
            Conexion conexion=new Conexion();
            ResultSet r=conexion.open().executeQuery("select id,idemisor,idreceptor,contenido,fecha from mensaje where mensaje.idemisor="+u.getId()+"");
            while(r.next()){
                
                Usuario receptor=PersistenciaUsuario.obtenerUsuario(r.getInt("idreceptor"));
                Mensaje m=new Mensaje(r.getInt("id"), u, receptor, r.getDate("fecha"), r.getString("contenido"));
                mensajes.add(m);
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaTabla.class.getName()).log(Level.SEVERE, null, ex);
        }finally{          
            return mensajes;
        }

    }
    
    public static ArrayList<Mensaje> obtenerMensajesRecibidos(Usuario u) {
        ArrayList<Mensaje> mensajes = new ArrayList<Mensaje>();
        try {
            Conexion conexion=new Conexion();
            ResultSet r=conexion.open().executeQuery("select id,idemisor,idreceptor,contenido,fecha from mensaje where mensaje.idreceptor="+u.getId()+"");
            while(r.next()){
                Usuario emisor=PersistenciaUsuario.obtenerUsuario(r.getInt("idemisor"));
                Mensaje m=new Mensaje(r.getInt("id"), emisor, u, r.getDate("fecha"), r.getString("contenido"));
                mensajes.add(m);
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaTabla.class.getName()).log(Level.SEVERE, null, ex);
        }finally{          
            return mensajes;
        }

    }
    
    public static int numeroMensajesRecibidos(Usuario u) {
        int i = 0;
        try {
            Conexion conexion=new Conexion();
            ResultSet r = conexion.open().executeQuery("select count(*) as numero from mensaje where mensaje.idreceptor="+u.getId()+"");
            while (r.next()) {
                i = r.getInt("numero");
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaTabla.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return i;
        }

    }
    public static int numeroMensajesEnviados(Usuario u) {
        int i = 0;
        try {
            Conexion conexion=new Conexion();
            ResultSet r = conexion.open().executeQuery("select count(*) as numero from mensaje where mensaje.idemisor="+u.getId()+"");
            while (r.next()) {
                i = r.getInt("numero");
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaTabla.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return i;
        }

    }
    
    public static ArrayList<Mensaje> obtenerMensajesEnviadosPaginados(Usuario u, Paginacion p) {
        ArrayList<Mensaje> mensajes = new ArrayList<Mensaje>();
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Conexion conexion=new Conexion();
            ResultSet r=conexion.open().executeQuery("select id,idemisor,idreceptor,contenido,fecha from mensaje where mensaje.idemisor="+u.getId()+" order by fecha desc limit "+p.getRegistrosPagina()+" offset "+p.offset()+"");
            while(r.next()){
                
                Usuario receptor=PersistenciaUsuario.obtenerUsuario(r.getInt("idreceptor"));
                Mensaje m=new Mensaje(r.getInt("id"), u, receptor, sdf.parse(r.getString("fecha")), r.getString("contenido"));
                mensajes.add(m);
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaTabla.class.getName()).log(Level.SEVERE, null, ex);
        }finally{          
            return mensajes;
        }

    }
    
    public static ArrayList<Mensaje> obtenerMensajesRecibidosPaginados(Usuario u, Paginacion p) {
        ArrayList<Mensaje> mensajes = new ArrayList<Mensaje>();
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Conexion conexion=new Conexion();
            ResultSet r=conexion.open().executeQuery("select id,idemisor,idreceptor,contenido,fecha from mensaje where mensaje.idreceptor="+u.getId()+" order by fecha desc limit "+p.getRegistrosPagina()+" offset "+p.offset()+"");
            while(r.next()){
                
                Usuario emisor=PersistenciaUsuario.obtenerUsuario(r.getInt("idemisor"));
                Mensaje m=new Mensaje(r.getInt("id"), emisor, u, sdf.parse(r.getString("fecha")), r.getString("contenido"));
                mensajes.add(m);
            }
            conexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaTabla.class.getName()).log(Level.SEVERE, null, ex);
        }finally{          
            return mensajes;
        }

    }
}
